home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-10-05 | 3.1 KB | 120 lines | [TEXT/PJMM] |
- unit ChessBoardSubs;
-
- { ©1991 [RHS] and Quinn "The Eskimo" }
-
- interface
-
- uses
- ChessTypes;
-
- procedure InitBoard (var b: boardType);
- procedure ClearBoardSet (var b: boardSet);
- function FindCell (var game: gameRecord; pt: point; var where: boardCoord): boolean;
- procedure GetRect (var game: gameRecord; where: boardCoord; var r: rect);
- procedure GetPawningRect (var game: gameRecord; var r: rect);
- function FindPiece (piece: pieceType; var b: boardType; var pos: boardCoord): boolean;
-
- implementation
-
- procedure InitBoard (var b: boardType);
- var
- x: boardXNdx;
- y: boardYNdx;
- begin
- for x := 0 to kBoardXMax do begin
- for y := 0 to kBoardYMax do begin
- b[x, y].occupant := Oempty;
- b[x, y].colour := cellColour((x + y) mod 2);
- end; { for }
- end; { for }
- for x := 0 to kBoardXMax do begin
- b[x, 1].occupant := OpawnB;
- b[x, 6].occupant := OpawnW;
- end; { for }
- b[0, 0].occupant := OrookB;
- b[1, 0].occupant := OknightB;
- b[2, 0].occupant := ObishopB;
- b[3, 0].occupant := OqueenB;
- b[4, 0].occupant := OkingB;
- b[5, 0].occupant := ObishopB;
- b[6, 0].occupant := OknightB;
- b[7, 0].occupant := OrookB;
- b[0, 7].occupant := OrookW;
- b[1, 7].occupant := OknightW;
- b[2, 7].occupant := ObishopW;
- b[3, 7].occupant := OqueenW;
- b[4, 7].occupant := OkingW;
- b[5, 7].occupant := ObishopW;
- b[6, 7].occupant := OknightW;
- b[7, 7].occupant := OrookW;
- end; { InitBoard }
-
- procedure ClearBoardSet (var b: boardSet);
- var
- x: boardXNdx;
- y: boardYNdx;
- begin
- for x := 0 to kBoardXMax do begin
- for y := 0 to kBoardYMax do begin
- b[x, y] := false;
- end; { for }
- end; { for }
- end; { ClearBoardSet }
-
- function FindCell (var game: gameRecord; pt: point; var where: boardCoord): boolean;
- var
- tmpx, tmpy: integer;
- begin
- pt.h := pt.h - (game.boardXOrg + 1);
- pt.v := pt.v - (game.boardYOrg + 1);
- tmpx := pt.h div kCellXPitch;
- tmpy := pt.v div kCellYPitch;
- if (pt.h >= 0) and (pt.v >= 0) and (tmpx <= kBoardXMax) and (tmpy <= kBoardYMax) then begin
- where.x := tmpx;
- where.y := tmpy;
- FindCell := true;
- end
- else begin
- FindCell := false;
- end; { if }
- end; { FindCell }
-
- procedure GetRect (var game: gameRecord; where: boardCoord; var r: rect);
- begin
- r.top := game.boardYOrg + 1 + where.y * kCellYPitch;
- r.left := game.boardXOrg + 1 + where.x * kCellXPitch;
- r.bottom := r.top + kCellYSize;
- r.right := r.left + kCellXSize;
- end;
-
- procedure GetPawningRect (var game: gameRecord; var r: rect);
- var
- w: boardCoord;
- where: boardCoord;
- begin
- where.x := kPawningX;
- where.y := kPawningY;
- GetRect(game, where, r);
- r.right := r.right + kCellXPitch * 3;
- InsetRect(r, -kPawningXBorder, -kPawningYBorder);
- end; { GetPawningRect }
-
- function FindPiece (piece: pieceType; var b: boardType; var pos: boardCoord): boolean;
- var
- x: boardXNdx;
- y: boardYNdx;
- begin
- for x := 0 to kBoardXMax do begin
- for y := 0 to kBoardYMax do begin
- if b[x, y].occupant = piece then begin
- pos.x := x;
- pos.y := y;
- FindPiece := true;
- exit(FindPiece);
- end; { if }
- end; { for }
- end; { for }
- FindPiece := false;
- end; { FindPiece }
-
- end. { ChessBoardSubs }